//类
class MySQLConnectModel{
    //构造函数 类被实例化的时候自动触发
    constructor(config) {
        //设计模式的东西 mysql一次只能让一个类去连接
        //单例模式  实例化一个
        if (!MySQLConnectModel.instance) {
            //引入配置文件
            //网站是查询多（爬虫95%) 还是删除修改多 写入（5%） 
            this.config = require("./config.js").master;
            //引入mysql库
            this.mysql = require("mysql");
            MySQLConnectModel.instance = this;
        }
        return MySQLConnectModel.instance
    }
    //默认值 dual表关键字（保证语法完整）
    query(sql="select 'no sql' as result from dual",callback){
        //创建与mysql服务器之间的链接 放入配置
        let conn = this.mysql.createConnection(this.config);
 
        //mysql每次查询都需要主动连接数据库 connect才是真正的连接，查询完成以后自动断开连接（原因：带宽优先尽早释放给别人使用）
        conn.connect(err=>{
                if(err) console.log(err);
                console.log("database connection Success!");
            }
        );

        //查询
        conn.query(sql,(err,result,fileds)=>{
            callback(err,result);  //回调函数把这两个拿走
        });
        //断开连接 结束
        conn.end(err=>{
            if(err) console.log(err);
            console.log("database interrupt!");
        });

    }
}
//实例化
const MySQLDB = new MySQLConnectModel();
//暴露
module.exports = MySQLDB;





